using System.Collections.ObjectModel;
using System.ComponentModel.DataAnnotations;
using System.Runtime.Serialization;

namespace FU.Capstones.IMS.Web.Common.InventoryServiceProxy.DataContracts
{
    [DataContract(Namespace = WebConstants.ServiceNamespace)]
    public class Partner: BindingModelBase<Partner>
    {
        public Partner()
        {
            AddAllAttributeValidators();
        }
        private int partnerID;
        [DataMember]
        [Key]
        public int PartnerID
        {
            get { return partnerID; }
            set
            {
                if(!Equals(partnerID,value))
                {
                    partnerID = value;
                    RaisePropertyChanged(() => PartnerID);
                }
            }
        }

        private string partnerCode;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Mã công ty không đưọc bỏ trống.")]
        [StringLength(50, ErrorMessage = "Mã công ty không dài quá 20 kí tự.")]
        public string PartnerCode
        {
            get { return partnerCode; }
            set
            {
                if (!ReferenceEquals(partnerCode, value))
                {
                    partnerCode = value;
                    RaisePropertyChanged(() => PartnerCode);
                }
            }
        }

        public string PartnerCodeSearch
        {
            get { return partnerCode; }
            set
            {
                if (!ReferenceEquals(partnerCode, value))
                {
                    partnerCode = value;
                    RaisePropertyChanged(() => PartnerCodeSearch);
                }
            }
        }

        private string companyName;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Tên công ty không đưọc bỏ trống.")]
        [StringLength(50, ErrorMessage = "Tên công ty không dài quá 50 kí tự.")]
        public string CompanyName
        {
            get { return companyName; }
            set
            {
                if (!ReferenceEquals(companyName, value))
                {
                    companyName = value;
                    RaisePropertyChanged(() => CompanyName);
                }
            }
        }

        public string CompanyNameSearch
        {
            get { return companyName; }
            set
            {
                if (!ReferenceEquals(companyName, value))
                {
                    companyName = value;
                    RaisePropertyChanged(() => CompanyNameSearch);
                }
            }
        }

        private string officePhone;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "ĐT cố định không đưọc bỏ trống.")]
        [StringLength(15, ErrorMessage = "Số điện thoại không dài quá 15 kí tự.")]
        public string OfficePhone
        {
            get { return officePhone; }
            set
            {
                if(!ReferenceEquals(officePhone,value))
                {
                    officePhone = value;
                    RaisePropertyChanged(() => OfficePhone);
                }
            }
        }

        private string mobilePhone;
        [DataMember]
        [StringLength(15, ErrorMessage = "Số điện thoại không dài quá 15 kí tự.")]
        public string MobilePhone
        {
            get { return mobilePhone; }
            set
            {
                if (!ReferenceEquals(mobilePhone, value))
                {
                    mobilePhone = value;
                    RaisePropertyChanged(() => MobilePhone);
                }
            }
        }

        private string address;
        [DataMember]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Địa chỉ không đưọc bỏ trống.")]
        public string Address
        {
            get { return address; }
            set
            {
                if (!ReferenceEquals(address, value))
                {
                    address = value;
                    RaisePropertyChanged(() => Address);
                }
            }
        }

        public string AddressSearch
        {
            get { return address; }
            set
            {
                if (!ReferenceEquals(address, value))
                {
                    address = value;
                    RaisePropertyChanged(() => AddressSearch);
                }
            }
        }

        private string email;
        [DataMember]
        [StringLength(20, ErrorMessage = "Thư điện tử không dài quá 20 kí tự.")]
        [RegularExpression(WebConstants.EmailRegex, ErrorMessage = "Thư điện tử không đúng định dạng.")]
        public string Email
        {
            get { return email; }
            set
            {
                if (!ReferenceEquals(email, value))
                {
                    email = value;
                    RaisePropertyChanged(() => Email);
                }
            }
        }

        private int rating;
        [DataMember]
        public int Rating
        {
            get { return rating; }
            set
            {
                if (!Equals(rating, value))
                {
                    rating = value;
                    RaisePropertyChanged(() => Rating);
                }
            }
        }

        private string description;
        [DataMember]
        public string Description
        {
            get { return description; }
            set
            {
                if (!ReferenceEquals(description, value))
                {
                    description = value;
                    RaisePropertyChanged(() => Description);
                }
            }
        }

        private string fax;
        [DataMember]
        [StringLength(15, ErrorMessage = "Thư điện tử không dài quá 15 kí tự.")]
        public string Fax
        {
            get { return fax; }
            set
            {
                if (!ReferenceEquals(fax, value))
                {
                    fax = value;
                    RaisePropertyChanged(() => Fax);
                }
            }
        }

        private ObservableCollection<Contact> contactCollection;
        [DataMember]
        public ObservableCollection<Contact> ContactCollection
        {
            get { return contactCollection; }
            set
            {
                if (!ReferenceEquals(contactCollection, value))
                {
                    contactCollection = value;
                    RaisePropertyChanged(() => ContactCollection);
                }
            }
        }

        private bool isDelete;
        [DataMember]
        public bool IsDelete
        {
            get { return isDelete; }
            set
            {
                if (!Equals(isDelete, value))
                {
                    isDelete = value;
                    RaisePropertyChanged(() => IsDelete);
                }
            }
        }

        private bool? isSupplier;
        [DataMember]
        public bool? IsSupplier
        {
            get { return isSupplier; }
            set
            {
                if (!Equals(isSupplier, value))
                {
                    isSupplier = value;
                    RaisePropertyChanged(() => IsSupplier);
                }
            }
        }
        private bool isSupplierSearch;
        public bool IsSupplierSearch
        {
            get { return isSupplierSearch; }
            set
            {
                if (!Equals(isSupplierSearch, value))
                {
                    isSupplierSearch = value;
                    RaisePropertyChanged(() => IsSupplierSearch);
                }
            }
        }
        private bool isCustomerSearch;
        public bool IsCustomerSearch
        {
            get { return isCustomerSearch; }
            set
            {
                if (!Equals(isCustomerSearch, value))
                {
                    isCustomerSearch = value;
                    RaisePropertyChanged(() => IsCustomerSearch);
                }
            }
        }

    }
}
